package com.jm.controller;



import com.jm.common.util.Utils;
import com.jm.common.util.entity.R;
import com.jm.pojo.AddressBook;
import com.jm.service.AddressBookService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.print.attribute.ResolutionSyntax;
import java.util.List;

@Slf4j
@RestController
@RequestMapping("/addressBook")
public class AddressBookController {

    @Autowired
    private AddressBookService addressBookService;

    /**
     * 新增一个地址
     *
     * @param addressBook 前台输入的地址信息
     * @return 若成功则返回这个地址的对象
     */
    @PostMapping()
    public R<AddressBook> save(@RequestBody AddressBook addressBook) {
        log.info("当前用户新增的地址为{}", addressBook);
//      设置这个地址的归属用户的id值
        addressBook.setUserId(Utils.getCurrentId());
        boolean save = addressBookService.save(addressBook);
        if (save) return R.success(addressBook);
        return R.error("添加失败");
    }

    /**
     * 设置一个地址信息为默认的地址(修改默认标记)
     *
     * @param addressBook 前台输入的地址信息
     * @return 若成功则返回被设置为默认地址的地址对象
     */
    @PutMapping("/default")
    public R<AddressBook> setDefaultAddress(@RequestBody AddressBook addressBook) {
        log.info("设置的默认地址为  {}", addressBook);
        boolean b = addressBookService.setDefault(addressBook);
        if (!b) R.error("设置默认地址失败");
        return R.success(addressBook);
    }

    /**
     * 根据地址对象的id来查询某一个地址对象
     *
     * @param id
     * @return
     */
    @GetMapping("/{id}")
    public R<AddressBook> getById(@PathVariable Long id) {
        AddressBook AddressBook = addressBookService.getById(id);
        if (AddressBook == null) return R.error("查询不到该条地址");
        return R.success(AddressBook);
    }

    /**
     * 查询一个用户的默认地址
     *
     * @return 若成功返回默认的地址对象
     */
    @GetMapping("/default")
    public R<AddressBook> getDefaultById() {
        AddressBook one = addressBookService.selectByDefault();
        if (one != null) {
            log.info("该用户的默认地址为{}", one);
            return R.success(one);
        }
        return R.error("未找到默认地址");
    }

    /**
     * 查询一个用户的所有地址
     *
     * @param addressBook
     * @return 该用户的地址列表
     */
    @GetMapping("/list")
    public R<List<AddressBook>> getList(AddressBook addressBook) {
        List<AddressBook> list = addressBookService.selectAllAddress(addressBook);
        if (list.size() > 0 && list != null) return R.success(list);
        return R.error("查询不到这个用户的用户地址");
    }

}
